package com.fsy.main;

import java.io.File;
import java.util.Iterator;
import java.util.Scanner;
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  

import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;

/**
 * 界面操作类
 * @author Sylvia
 *
 */
public class MainClass {

    private static AddressBook myAddressBook=new AddressBook();//创建通讯录对象
    private static File f=new File("list.txt");//打开的通讯录文件
    
    /**
     * main方法
     * @param args 初始化
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        //showMainMenu();
        openAddressBook();
    }
    
    /**
     * 主界面
     */
    public static void showMainMenu(){
        show("---------我的通讯录--------");
        show("-    \t1  查看通讯录          -");
        show("-    \t2  查找联系人          -");
        show("-    \t3  新增联系人          -");
        show("-    \t4  修改联系人          -");
        show("-    \t5  删除联系人          -");
        show("-    \t6  保存通讯录          -");
        show("-    \t7  退出通讯录          -");
        show("--------------------------");
        System.out.print("请输入序号选择菜单：");
        Scanner keyin=new Scanner(System.in);
        int select=keyin.nextInt();
        switch(select){
            case 1:showAddressBook();break;// 查看通讯录
            case 2:findPerson();break;//查找联系人
            case 3:addNewPerson();break;//新增联系人
            case 4:alterPerson();break;//修改联系人
            case 5:deletePerson();break;//删除联系人
            case 6:saveAddressBook();break;//保存通讯录
            case 7:quitsys();break;//退出通讯录
            default:showMainMenu();
        }
 
    }
    
    /**
     * 输出字符
     * @param s 输出的字符串信息
     */
    public static void show(String s){
        System.out.println(s);
    }
    
    /**
     * 回车确认继续
     */
    public static void enter(){
        new Scanner(System.in).nextLine();
    }
    
    /**
     * 查看通讯录
     */
    public static void showAddressBook(){
        Iterator<Person> itor=myAddressBook.iterator();
        Person p;
        if(myAddressBook.size()==0){
            show("通讯录为空！按回车确认返回主菜单。");
            enter();
            showMainMenu();
            return;
        }
        int i=1;
        while(itor.hasNext()){
            p=itor.next();
            showPerson(p);//显示联系人
            i++;
            //if(i++%5==0)enter();//每次显示5个联系人，按回车继续
        }
        show("已经浏览完全部联系人。按回车确认返回主菜单。");
        enter();
        showMainMenu();
         
    }
    
    /**
     * 输出联系人
     * @param p 联系人
     */
    public static void showPerson(Person p){
        show("[联系人]姓名:"+p.getName()+"   电话:"+p.getTelphone()+"   通讯地址:"+p.getAddress());
    }
    
    /**
     * 查找联系人
     */
    public static void findPerson(){
        show("----------查找联系人----------");
        System.out.print("请输入联系人姓名：");
        String search=new Scanner(System.in).next();
        Person person[]=myAddressBook.findPerson(search);//查找联系人
        if(person.length==0){
            show("没有找到符合要求的联系人！按回车键确认返回主菜单。");
            enter();
            showMainMenu();
            return;
        }
        int i=1;
        for(Person p:person){
            showPerson(p);//显示联系人
            i++;
/*            if(i++%5==0){
                enter();
            }*/
        }
        show("以上是查找到的所有联系人！按回车键确认返回主菜单。");
        enter();
        showMainMenu();
         
    }
    
    /**
     * 新增联系人
     */
    public static void addNewPerson(){
        show("----------新增联系人-----------");
        show("输入联系人信息：");
        System.out.print("姓名：");
        String name=new Scanner(System.in).next();
        System.out.print("电话：");
        String telphone=new Scanner(System.in).next();
        
        while(isMobileNO(telphone)!=true){
            show("请输入正确的电话号码！");
            System.out.print("电话：");
            telphone=new Scanner(System.in).next();
        }
        
        System.out.print("通讯地址：");
        String address=new Scanner(System.in).next();
        Person p=new Person(name,telphone,address);
        show("您将要创建如下的联系人：");
        showPerson(p);
        System.out.print("请问您要确认创建吗？是(y)/否(n):");
        String yesno=new Scanner(System.in).next();
        if("y".equals(yesno)){
            myAddressBook.addPerson(p);
            show("联系人已添加！按回车键确认返回主菜单。");
            enter();
            showMainMenu();
        }
        else{
            show("您已放弃了添加新联系人！按回车键确认返回主菜单。");
            enter();
            showMainMenu();
        }
         
    }
    
    /**
     * 修改联系人
     */
    public static void alterPerson(){
        show("----------修改联系人-----------");
        System.out.print("请输入要修改的联系人姓名：");
        String search=new Scanner(System.in).next();
        
        Person person[]=myAddressBook.findPerson(search);//查找要删除的联系人
        if(person.length==0){
            show("没有找到符合要求的联系人！按回车键确认返回主菜单。");
            enter();
            showMainMenu();
            return;
        }
        int i=1;
        for(Person p:person){
            showPerson(p);//显示要修改的联系人
            i++;
/*            if(i++%5==0){
                enter();
            }*/
        }
        show("以上是查找到的所有联系人！");
        
        if(i>2) System.out.println("提示：存在多个同名联系人，默认修改第一个联系人!");
        
        show("输入修改后的联系人信息：");
        System.out.print("姓名：");
        String name=new Scanner(System.in).next();
        System.out.print("电话：");
        String telphone=new Scanner(System.in).next();
        
        while(isMobileNO(telphone)!=true){
            show("请输入正确的电话号码！");
            System.out.print("电话：");
            telphone=new Scanner(System.in).next();
        }
        
        System.out.print("通讯地址：");
        String address=new Scanner(System.in).next();
        Person np=new Person(name,telphone,address);
        show("您将要修改为如下的联系人：");
        showPerson(np);
        
        System.out.print("请问您确认要修改吗？是(y)/否(n):");
        String yesno=new Scanner(System.in).next();     
        //若存在多个同名联系人，默认修改第一个联系人
        if("y".equals(yesno)){
        	i=1;
        	for(Person p:person){
                myAddressBook.modifiedPerson(p,np);//修改联系人
                break;
/*            if(i++%5==0){
                enter();
            }*/
            }
            show("联系人已修改！按回车键确认返回主菜单。");
            enter();
            showMainMenu();
        }
        else{
            show("您已放弃了修改联系人！按回车键确认返回主菜单。");
            enter();
            showMainMenu();
        }
        enter();
    }
    
    /**
     * 删除联系人
     */
    public static void deletePerson(){
        show("----------删除联系人-----------");
        System.out.print("请输入要删除的联系人姓名：");
        String search=new Scanner(System.in).next();
        Person person[]=myAddressBook.findPerson(search);//查找要删除的联系人
        if(person.length==0){
            show("没有找到符合要求的联系人！按回车键确认返回主菜单。");
            enter();
            showMainMenu();
            return;
        }
        int i=1;
        for(Person p:person){
            showPerson(p);//显示要删除的联系人
            i++;
/*            if(i++%5==0){
                enter();
            }*/
        }
        show("以上是查找到的所有联系人！");
        System.out.print("请问您要确认删除吗？是(y)/否(n):");
        String yesno=new Scanner(System.in).next();
        if("y".equals(yesno)){
        	i=1;
        	for(Person p:person){
                myAddressBook.removePerson(p);//删除联系人
                i++; 
/*            if(i++%5==0){
                enter();
            }*/
            }
            show("联系人已删除！按回车键确认返回主菜单。");
            enter();
            showMainMenu();
        }
        else{
            show("您已放弃了删除联系人！按回车键确认返回主菜单。");
            enter();
            showMainMenu();
        }
        enter();
    }
    
    /**
     * 导出文件中的联系人
     */
    public static void openAddressBook(){
/*        show("----------打开通讯录----------");
        System.out.print("输入通讯录文件名:");
        f=new File(new Scanner(System.in).next());
        myAddressBook.loadAddressBook(f);
        show("打开成功！按回车键确认返回主菜单。");
        enter();
        showMainMenu();*/
    	
        f=new File("list.txt");
        myAddressBook.loadAddressBook(f);
        showMainMenu();
    }
    
    /**
     * 退出系统
     */
    public static void quitsys(){
        myAddressBook.saveAddressBook(f);
        System.exit(0);
    }
    
    /**
     * 保存通讯录
     */
    public static void saveAddressBook(){
        myAddressBook.saveAddressBook(f);
        show("保存成功！按回车键确认返回主菜单。");
        enter();
        showMainMenu();
    }
    
    /**
     * 判断电话是否正确
     * @param mobiles 电话号码
     * @return false or true
     */
    public static boolean isMobileNO(String mobiles){
    	Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");  
		Matcher m = p.matcher(mobiles);  
		return m.matches(); 
    }
}
